﻿#ifndef BUFFER_H
#define BUFFER_H

#include <string>
#include <vector>
#include <cassert>
#include <cstring>


#define BUFFER_DEFAULT_SIZE 1024

class Buffer
{
private:
    std::vector<char> m_buffer;
    uint64_t m_read_step;  // 读下标
    uint64_t m_write_step; // 写下标

private:
    // 获取缓冲区起始地址
    char *begin();
    // 获取缓冲区头部空闲空间大小
    uint64_t getHeadSpace();
    // 获取缓冲区尾部空闲空间大小
    uint64_t getTailSpace();
    // 获取缓冲区总空间大小
    uint64_t getTotalSpace();
    // 确保写入空间大小
    void ensureWriteSpace(uint64_t size);

public:
    Buffer();
    // 移动读下标
    void moveReadStep(uint64_t size);
    // 移动写下标
    void moveWriteStep(uint64_t size);
    // 获取读取数据大小
    uint64_t getReadSize();
    // 获取写入地址
    char *getWriteAddr();
    // 获取读取地址
    char *getReadAddr();
    // 写入数据
    void write(const void *data, uint64_t size);
    // 写入字符串
    void writeString(const std::string &data);
    // 写入缓冲区
    void writeBuffer(Buffer &data);
    // 读取数据
    void read(void *buffer, uint64_t size);
    // 读取字符串
    std::string readString(uint64_t size);
    // 读取行
    std::string readLineString();
    // 清空缓冲区
    void clear();
};
#endif
